/**
 * @description 获取对应键名的值
 * @param {Object} obj  源对象
 * @param {Array} keys  键名 keys支持两种类型
 * @param {Boolean} returnNull  源对象为空时，是否仍然返回键值对结果
 * @returns {Object} 
 * @example 支持以下几种情况
 * 1、['id', 'name']   --- 返回结果：{id:obj.id, name:obj.name}
 * 2、[['id', 'resultId' ], 'name'] --- 返回结果：{resultId:obj.id, name:obj.name}
 * 3、[['child.id', 'resultId'], 'name'] --- 返回结果：{resultId:obj.child.id, name:obj.name}
 */
export default function getValueByKey <T>(obj: T, keys: Array<string[] | string>, returnNull = false) {
	const result = {};
	if (!obj && !returnNull) return {};
	keys.forEach(item => {
		if (typeof item === 'string') {
			//@ts-ignore
			result[item] = obj?.[item] || null;
		} else if (Array.isArray(item)) {
			// 多级
			const oldKey = item[0];
			const newKey = item[1];
			//@ts-ignore
			let val = obj?.[oldKey];
			if (oldKey.includes('.')) {
				const oldKeyList = oldKey.split('.');
				val = oldKeyList.reduce((p, n) => {
					//@ts-ignore
					return p?.[n];
				}, obj);
			}
			//@ts-ignore
			result[newKey] = val || null;
		}
	});
	return result;
};

// type GroupItem<K> = K & { id: string };

// interface Data<T> {
// 	data: T[];
// }
// type GroupRes<T, K> = Data<T> & GroupItem<K>;
// // 分组函数
// export const getGroupList = <T, K>(list: T[], getKey: (item: T) => GroupItem<K>) => {
// 	const result: Array<GroupRes<T, K>> = [];
// 	list.forEach(item => {
// 		const target: GroupItem<K> = getKey(item);
// 		if (target?.id) {
// 			const i = result.findIndex(x => x.id === target.id);
// 			if (i > -1) {
// 				result[i].data.push(item);
// 			} else {
// 				result.push({
// 					...target,
// 					data: [item]
// 				});
// 			}
// 		}
// 	});
// 	return result;
// };